﻿Imports TransportadoraToledoBLL
Imports TransportadoraToledoDAL
Imports System.Windows.Forms

Public Class frm_cadastro_rotas
#Region "Métodos e variáveis"
    Public objBLL As New RotasBLL
    Public controle As String
    Public ultimo, primeiro, atual As Integer
    Public tipo As Char

    Sub carregaPrimeiroUltimo()
        Try
            ultimo = objBLL.localizarPrimeiroUltimo("ultimo")
            primeiro = objBLL.localizarPrimeiroUltimo("primeiro")
            atual = ultimo
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Sub carregaUltimo()
        If (ultimo <> 0) Then
            objBLL.localizar(ultimo)
            If (objBLL.pCodigo <> 0) Then
                carregaCampos()
            End If
        End If
    End Sub

    Sub carregaPrimeiro()
        If (primeiro <> 0) Then
            objBLL.localizar(primeiro)
            If (objBLL.pCodigo <> 0) Then
                carregaCampos()
            End If
        End If
    End Sub

    Sub limpar()
        tbCidDestino.Text = ""
        tbCidOrigem.Text = ""
        tbCodDestino.Text = ""
        tbCodOrigem.Text = ""
        tbCodigo.Text = ""
        tbDescricao.Text = ""
        tbDistancia.Text = ""
        objBLL.limpar()
    End Sub

    Sub status(ByVal sta As Boolean)
        If (controle = "A") Then
            bPesquisarCidOrigem.Enabled = False
            bPesquisarCidDestino.Enabled = False
            tbDistancia.Enabled = False
        Else
            bPesquisarCidOrigem.Enabled = True
            bPesquisarCidDestino.Enabled = True
            tbDistancia.Enabled = True
        End If
        If (tbCodigo.Text = "" Or controle = "A") Then
            bIncluir.Enabled = sta
            bExcluir.Enabled = sta
            If (tbCodigo.Text = "") Then
                bAlterar.Enabled = False
                bVaPara.Enabled = False
                bPesquisar.Enabled = False
                bExcluir.Enabled = False
            Else
                bExcluir.Enabled = sta
                bPesquisar.Enabled = sta
                bAlterar.Enabled = sta
                bVaPara.Enabled = sta
            End If
            bCancelar.Enabled = Not sta
            bSalvar.Enabled = Not sta
            bPrimeiro.Enabled = sta
            bProximo.Enabled = sta
            bUltimo.Enabled = sta
            bAnterior.Enabled = sta
            gbConteudo.Enabled = Not sta
        Else
            bIncluir.Enabled = sta
            If (tbCodigo.Text = "") Then
                bExcluir.Enabled = False
                bAlterar.Enabled = False
                bVaPara.Enabled = False
                bPesquisar.Enabled = False
            Else
                bExcluir.Enabled = sta
                bAlterar.Enabled = sta
                bVaPara.Enabled = sta
                bPesquisar.Enabled = sta
            End If
            bCancelar.Enabled = Not sta
            bSalvar.Enabled = Not sta
            gbConteudo.Enabled = Not sta
        End If
        If (atual = primeiro And atual = ultimo) Then
            bProximo.Enabled = False
            bUltimo.Enabled = False
            bAnterior.Enabled = False
            bPrimeiro.Enabled = False
        ElseIf (atual = ultimo) Then
            bProximo.Enabled = False
            bUltimo.Enabled = False
            bAnterior.Enabled = True
            bPrimeiro.Enabled = True
        ElseIf (atual = primeiro) Then
            bProximo.Enabled = True
            bUltimo.Enabled = True
            bAnterior.Enabled = False
            bPrimeiro.Enabled = False
        Else
            bProximo.Enabled = True
            bUltimo.Enabled = True
            bAnterior.Enabled = True
            bPrimeiro.Enabled = True
        End If
    End Sub

    Sub carregaCampos()
        Try
            tbCodOrigem.Text = objBLL.pCidade_origem
            tbCidOrigem.Text = objBLL.localizarCidade(objBLL.pCidade_origem)
            tbCodDestino.Text = objBLL.pCidade_destino
            tbCidDestino.Text = objBLL.localizarCidade(objBLL.pCidade_destino)
            tbCodigo.Text = objBLL.pCodigo
            tbDescricao.Text = objBLL.pDescricao
            tbDistancia.Text = objBLL.pDistancia
            If (objBLL.pAtiva) Then
                cbAtiva.Checked = True
            Else : cbAtiva.Checked = False
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Sub carregaPropriedades()
        Try
            If (tbCodigo.Text.Trim = "") Then
                objBLL.pCodigo = 0
            Else
                objBLL.pCodigo = tbCodigo.Text
            End If
            If (tbCodOrigem.Text.Trim = "") Then
                objBLL.pCidade_origem = 0
            Else
                objBLL.pCidade_origem = tbCodOrigem.Text
            End If
            If (tbCodDestino.Text.Trim = "") Then
                objBLL.pCidade_destino = 0
            Else
                objBLL.pCidade_destino = tbCodDestino.Text
            End If
            objBLL.pDescricao = tbDescricao.Text
            If (Not Integer.TryParse(tbDistancia.Text, objBLL.pDistancia)) Then
                Throw New Exception("Distância deve receber valor numérico")
            End If
            If cbAtiva.Checked Then
                objBLL.pAtiva = 1
            Else : objBLL.pAtiva = 0
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub
#End Region

    Private Sub bIncluir_Click(sender As System.Object, e As System.EventArgs) Handles bIncluir.Click
        limpar()
        controle = "I"
        status(False)
        tbCodOrigem.Text = "5115"
        tbCidOrigem.Text = "Presidente Prudente"
    End Sub

    Private Sub bAlterar_Click(sender As System.Object, e As System.EventArgs) Handles bAlterar.Click
        controle = "A"
        status(False)
    End Sub

    Private Sub bExcluir_Click(sender As System.Object, e As System.EventArgs) Handles bExcluir.Click
        Try
            If (MessageBox.Show("Deseja excluir?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) Then
                carregaPropriedades()
                objBLL.excluir()
                MessageBox.Show("Excluido com sucesso!", "TransToledo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                limpar()
                carregaPrimeiroUltimo()
                carregaUltimo()
                status(True)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bSalvar_Click(sender As System.Object, e As System.EventArgs) Handles bSalvar.Click
        Try
            carregaPropriedades()
            If (controle = "I") Then
                If (MessageBox.Show("Confirma registro de nova rota de " + tbCidOrigem.Text + " até " + tbCidDestino.Text + " (" + tbDistancia.Text + " KMs)?" +
                                    vbNewLine + "As cidades de origem e destino e a distância não podem ser alteradas posteriormente.",
                                    "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = DialogResult.Yes) Then
                    objBLL.inserir()
                    MessageBox.Show("Incluido com sucesso!", "TransToledo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                    limpar()
                    carregaPrimeiroUltimo()
                    carregaUltimo()
                    status(True)
                End If
            Else
                objBLL.alterar()
                MessageBox.Show("Alterado com sucesso!", "TransToledo", MessageBoxButtons.OK, MessageBoxIcon.Asterisk)
                status(True)
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bCancelar_Click(sender As System.Object, e As System.EventArgs) Handles bCancelar.Click
        Try
            If (gbConsulta.Visible) Then
                bClose_Click(sender, e)
            End If
            If (controle = "I") Then
                carregaPrimeiroUltimo()
                carregaUltimo()
            ElseIf (controle = "A") Then
                objBLL.localizar(atual)
                If (objBLL.pCodigo <> 0) Then
                    carregaCampos()
                    atual = objBLL.pCodigo
                End If
            End If
            controle = ""
            status(True)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bVaPara_Click(sender As System.Object, e As System.EventArgs) Handles bVaPara.Click
        Try
            Dim frm As New frm_VaPara("rotas")
            frm.ShowDialog()
            If (frm.codigo <> 0) Then
                objBLL.localizar(frm.codigo)
                If (objBLL.pCodigo <> 0) Then
                    carregaCampos()
                    atual = objBLL.pCodigo
                Else
                    MessageBox.Show("Registro Inexistente!", "TransToledo", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
                    bVaPara_Click(sender, e)
                End If
            End If
            status(True)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub frm_cadastro_rotas_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Try
            carregaPrimeiroUltimo()
            carregaUltimo()
            bCancelar_Click(sender, e)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bPesquisar_Click(sender As System.Object, e As System.EventArgs) Handles bPesquisar.Click
        tipo = "R"
        limpaControleConsulta()
        liberaPesq()
        addPesqRota()
    End Sub

    Sub limpaControleConsulta()
        Dim con As New Control
        Try
            For i As Integer = gbConsulta.Controls.Count - 1 To 0 Step -1
                con = gbConsulta.Controls(i)
                If con.Name <> "bClose" And con.Name <> "bFiltrar" And con.Name <> "dgDados" Then
                    gbConsulta.Controls.Remove(con)
                End If
            Next
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Private Sub bPrimeiro_Click(sender As System.Object, e As System.EventArgs) Handles bPrimeiro.Click
        carregaPrimeiro()
        atual = primeiro
        status(True)
    End Sub

    Private Sub bAnterior_Click(sender As System.Object, e As System.EventArgs) Handles bAnterior.Click
        Try
            Dim codigo = objBLL.localizarProxAnterior("anterior", atual)
            objBLL.localizar(codigo)
            If (objBLL.pCodigo <> 0) Then
                carregaCampos()
                atual = objBLL.pCodigo
            End If
            status(True)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bProximo_Click(sender As System.Object, e As System.EventArgs) Handles bProximo.Click
        Try
            Dim codigo = objBLL.localizarProxAnterior("proximo", atual)
            objBLL.localizar(codigo)
            If (objBLL.pCodigo <> 0) Then
                carregaCampos()
                atual = objBLL.pCodigo
            End If
            status(True)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bUltimo_Click(sender As System.Object, e As System.EventArgs) Handles bUltimo.Click
        carregaUltimo()
        atual = ultimo
        status(True)
    End Sub

    Private Sub bSair_Click(sender As System.Object, e As System.EventArgs) Handles bSair.Click
        Me.Close()
    End Sub

    Private Sub bClose_Click(sender As System.Object, e As System.EventArgs) Handles bClose.Click
        gbConsulta.Visible = False
        tipo = ""
        Me.Location = New System.Drawing.Point(Me.Location.X, Me.Location.Y + 120)
        Me.Size = New Size(719, 314)
    End Sub

    Private Sub bFiltrar_Click(sender As System.Object, e As System.EventArgs) Handles bFiltrar.Click
        Try
            If tipo = "O" Or tipo = "D" Then
                Dim txt As New TextBox
                For Each obj As Object In gbConsulta.Controls.Find("tPesq", True)
                    txt = DirectCast(obj, TextBox)
                Next
                txtPesqKeyUp(txt, e)
            ElseIf tipo = "R" Then
                Dim b1, b2, b3 As Boolean
                Dim tb1 = "", tb2 As String = ""
                For Each obj As Control In gbConsulta.Controls
                    Select Case obj.Name
                        Case "cbOrigem"
                            b1 = DirectCast(obj, CheckBox).Checked
                        Case "cbDestino"
                            b2 = DirectCast(obj, CheckBox).Checked
                        Case "rbAtivas"
                            b3 = DirectCast(obj, RadioButton).Checked
                        Case "tbOrigem"
                            tb1 = DirectCast(obj, TextBox).Text
                        Case "tbDestino"
                            tb2 = DirectCast(obj, TextBox).Text
                    End Select
                Next
                If (b1 = True And tb1.Trim() = "") Then
                    Throw New Exception("Insira o nome da cidade de origem para pesquisa.")
                End If
                If (b2 = True And tb2.Trim() = "") Then
                    Throw New Exception("Insira o nome da cidade de destino para pesquisa.")
                End If
                If (b1 And b2) Then
                    dgDados.DataSource = objBLL.localizar(tb1, tb2, b3)
                ElseIf (b1 And Not b2) Then
                    dgDados.DataSource = objBLL.localizar(b3, "c.nom_cidade", tb1)
                Else
                    dgDados.DataSource = objBLL.localizar(b3, "cd.nom_cidade", tb2)
                End If
                If (dgDados.Columns.Item(0).HeaderText <> "Código") Then
                    dgDados.Columns.Item(0).HeaderText = "Código"
                    dgDados.Columns.Item(0).Width = 60
                    dgDados.Columns.Item(1).HeaderText = "Código Origem"
                    dgDados.Columns.Item(1).Width = 60
                    dgDados.Columns.Item(2).HeaderText = "Cidade de Origem"
                    dgDados.Columns.Item(2).Width = 220
                    dgDados.Columns.Item(3).HeaderText = "Código Destino"
                    dgDados.Columns.Item(3).Width = 60
                    dgDados.Columns.Item(4).HeaderText = "Cidade de Destino"
                    dgDados.Columns.Item(4).Width = 220
                    dgDados.Columns.Item(5).Visible = False
                    dgDados.Columns.Item(6).Visible = False
                    dgDados.Columns.Item(7).Visible = False
                End If
                Else : Throw New Exception("Erro na pesquisa.")
                End If
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bPesquisarCidOrigem_Click(sender As System.Object, e As System.EventArgs) Handles bPesquisarCidOrigem.Click
        Try
            If (Me.Size.Width = 719 And Me.Size.Height = 570) Then
                bClose_Click(sender, e)
            End If
            tipo = "O"
            limpaControleConsulta()
            liberaPesq()
            addPesqCidade()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bPesquisarCidDestino_Click(sender As System.Object, e As System.EventArgs) Handles bPesquisarCidDestino.Click
        Try
            If (Me.Size.Width = 719 And Me.Size.Height = 570) Then
                bClose_Click(sender, e)
            End If
            tipo = "D"
            limpaControleConsulta()
            liberaPesq()
            addPesqCidade()
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Sub liberaPesq()
        gbConsulta.Visible = True
        Me.Location = New System.Drawing.Point(Me.Location.X, Me.Location.Y - 120)
        Me.Size = New Size(719, 570)
    End Sub

    Sub addPesqCidade()
        Dim dal As New Dados()
        Dim l1 As New Label
        Dim l2 As New Label
        Dim l3 As New Label
        Dim cb1 As New ComboBox
        Dim cb2 As New ComboBox
        Dim txt As New TextBox
        Try
            For Each obj As Object In gbConsulta.Controls.Find("cbEstado", True)
                Exit Sub
            Next
            l1.Name = "lPais"
            l1.Text = "País"
            l1.Location = New System.Drawing.Point(24, 20)
            l2.Name = "lEstado"
            l2.Text = "Estado"
            l2.Location = New System.Drawing.Point(177, 20)
            l3.Name = "lCidade"
            l3.Text = "Cidade"
            l3.Location = New System.Drawing.Point(289, 20)
            cb1.Name = "cbPais"
            AddHandler cb1.SelectedIndexChanged, AddressOf comboSelected
            cb1.Size = New System.Drawing.Size(147, 26)
            cb1.Location = New System.Drawing.Point(27, 43)
            cb1.DropDownStyle = ComboBoxStyle.DropDownList
            cb2.Name = "cbEstado"
            cb2.Size = New System.Drawing.Size(97, 26)
            cb2.Location = New System.Drawing.Point(180, 43)
            cb2.DropDownStyle = ComboBoxStyle.DropDownList
            txt.Name = "tPesq"
            AddHandler txt.KeyUp, AddressOf txtPesqKeyUp
            txt.Size = New System.Drawing.Size(330, 20)
            txt.Location = New System.Drawing.Size(292, 43)
            dal.preencheCombo(cb1, "pais", "cod_pais", "nom_pais", "", "nom_pais")
            gbConsulta.Controls.Add(l1)
            gbConsulta.Controls.Add(l2)
            gbConsulta.Controls.Add(l3)
            gbConsulta.Controls.Add(cb1)
            gbConsulta.Controls.Add(cb2)
            gbConsulta.Controls.Add(txt)
            dal.preencheCombo(cb2, "estado", "cod_estado", "sgl_estado", "cod_pais=" + cb1.SelectedValue.ToString(), "nom_estado")
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Sub addPesqRota()
        Dim cb1 As New CheckBox
        Dim cb2 As New CheckBox
        Dim tb1 As New TextBox
        Dim tb2 As New TextBox
        Dim l1 As New Label
        Dim rb1 As New RadioButton
        Dim rb2 As New RadioButton
        Try
            cb1.Name = "cbOrigem"
            cb1.Text = "Origem:"
            cb1.Checked = False
            cb1.Location = New System.Drawing.Point(27, 19)
            cb2.Name = "cbDestino"
            cb2.Text = "Destino:"
            cb2.Checked = False
            cb2.Location = New System.Drawing.Point(251, 19)
            tb1.Name = "tbOrigem"
            tb1.Size = New System.Drawing.Size(216, 20)
            tb1.Location = New System.Drawing.Point(27, 43)
            tb2.Name = "tbDestino"
            tb2.Size = New System.Drawing.Size(216, 20)
            tb2.Location = New System.Drawing.Point(251, 43)
            l1.Name = "lRotas"
            l1.Text = "Rotas:"
            l1.Location = New System.Drawing.Point(475, 19)
            rb1.Name = "rbAtivas"
            rb1.Text = "Ativas"
            rb1.Checked = True
            rb1.AutoSize = True
            rb1.Location = New System.Drawing.Point(478, 43)
            rb2.Name = "rbTodas"
            rb2.Text = "Todas"
            rb2.AutoSize = True
            rb2.Location = New System.Drawing.Point(548, 43)
            gbConsulta.Controls.Add(cb1)
            gbConsulta.Controls.Add(cb2)
            gbConsulta.Controls.Add(tb1)
            gbConsulta.Controls.Add(tb2)
            gbConsulta.Controls.Add(l1)
            gbConsulta.Controls.Add(rb1)
            gbConsulta.Controls.Add(rb2)
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Private Sub comboSelected(ByVal sender As System.Object, ByVal e As System.EventArgs)
        Dim comboPais = DirectCast(sender, ComboBox)
        Dim comboEstado = DirectCast(sender, ComboBox)
        Dim dal As New Dados()
        Try
            For Each obj As Object In gbConsulta.Controls.Find("cbEstado", True)
                If TypeOf (obj) Is ComboBox Then
                    comboEstado = DirectCast(obj, ComboBox)
                    If comboEstado.Location.X = 180 And comboEstado.Location.Y = 43 Then
                        dal.preencheCombo(comboEstado, "estado", "cod_estado", "sgl_estado", "cod_pais=" + comboPais.SelectedValue.ToString(), "sgl_estado")
                    End If
                End If
            Next
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Private Sub txtPesqKeyUp(sender As System.Object, e As System.EventArgs)
        Dim txt = DirectCast(sender, TextBox)
        Dim comboEstado As New ComboBox
        Try
            If (txt.Text.Trim.Length = 0) Then
                Exit Sub
            End If
            For Each obj As Object In gbConsulta.Controls.Find("cbEstado", True)
                If TypeOf (obj) Is ComboBox Then
                    comboEstado = DirectCast(obj, ComboBox)
                    If comboEstado.Location.X = 180 And comboEstado.Location.Y = 43 Then
                        dgDados.DataSource = objBLL.localizarCidade(comboEstado.SelectedValue, txt.Text)
                        If (dgDados.Columns(0).HeaderText <> "País") Then
                            dgDados.Columns(0).HeaderText = "País"
                            dgDados.Columns(0).Width = 190
                            dgDados.Columns(1).HeaderText = "Estado"
                            dgDados.Columns(1).Width = 80
                            dgDados.Columns(2).HeaderText = "Cod. Cidade"
                            dgDados.Columns(2).Width = 80
                            dgDados.Columns(3).HeaderText = "Cidade"
                            dgDados.Columns(3).Width = 270
                        End If
                    End If
                End If
            Next
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    Private Sub dgDados_CellDoubleClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles dgDados.CellDoubleClick
        Try
            Select Case tipo
                Case "O"
                    tbCodOrigem.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(2).Value
                    tbCidOrigem.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(3).Value
                    bClose_Click(sender, e)
                Case "D"
                    tbCodDestino.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(2).Value
                    tbCidDestino.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(3).Value
                    bClose_Click(sender, e)
                Case "R"
                    tbCodigo.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(0).Value
                    tbCodOrigem.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(1).Value
                    tbCidOrigem.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(2).Value
                    tbCodDestino.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(3).Value
                    tbCidDestino.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(4).Value
                    tbDescricao.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(5).Value
                    tbDistancia.Text = dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(6).Value
                    If (dgDados.Rows.Item(dgDados.SelectedRows(0).Index).Cells(7).Value = True) Then
                        cbAtiva.Checked = True
                    Else : cbAtiva.Checked = False
                    End If
            End Select
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub

    Private Sub bAjuda_Click(sender As System.Object, e As System.EventArgs) Handles bAjuda.Click
        Try
            Dim Ajuda As String
            Ajuda = Application.StartupPath
            Ajuda = Ajuda.Replace("\bin\Debug", "\Arquivo de Ajuda\index.html#cadastroRotas")
            Dim Ie As Object
            Ie = CreateObject("InternetExplorer.Application")
            Ie.Visible = True
            Ie.Navigate(Ajuda)
        Catch ex As Exception
            MessageBox.Show(ex.Message)
        End Try
    End Sub
End Class